//方法一：叛逆
int cmp(const void* pa, const void* pb){
    return (*(int*)pa - *(int*)pb);
}
int maxIceCream(int* costs, int costsSize, int coins) {
    qsort(costs, costsSize, sizeof(int), cmp);
    int sum = 0, count = 0, i = 0;
    while(sum <= coins){
        if(i == costsSize){
            return count;
        }
        sum += costs[i++];
        count++;
    }
    return count - 1;
}

//方法二：服从
int maxIceCream(int* costs, int costsSize, int coins) {
    int max = costs[0], min = costs[0];
    for(int i = 0; i < costsSize; i++){
        if(costs[i] < min){
            min = costs[i];
        }
        if(costs[i] > max){
            max = costs[i];
        }
    }
    int count = max - min + 1;
    int *hash = (int*)malloc(sizeof(int) * count);
    memset(hash, 0, sizeof(int) * count);
    for(int i = 0; i < costsSize; i++){
        hash[costs[i] - min]++;
    }
    int j = 0, sum = 0, cout = 0;
    for(int i = 0; i < count; i++){
        if(sum > coins)
            break;
        while(hash[i]--){
            sum = sum + i + min;
            if(sum <= coins){
                cout++;
            }else{
                break;
            }
        }
    }
    return cout;
}

/*夏日炎炎，小男孩 Tony 想买一些雪糕消消暑。

商店中新到 n 支雪糕，用长度为 n 的数组 costs 表示雪糕的定价，其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费，他想要买尽可能多的雪糕。

注意：Tony 可以按任意顺序购买雪糕。

给你价格数组 costs 和现金量 coins ，请你计算并返回 Tony 用 coins 现金能够买到的雪糕的最大数量。

你必须使用计数排序解决此问题*/